package model

import (
	"database/sql"
)

//用户实例
type User struct {
	Info                 Info
	LoginData            LoginData
	RegisterData         RegisterData
	SecureCodeData       SecureCodeData
	VerifyCodeData       VerifyCodeData
	MovementData         MovementData
	ModifyData           ModifyData
	ChangePwdData        ChangePwdData
	MovementListData     MovementListData
	CheckMovement        CheckMovement
	CheckHeadPortrait    []CheckHeadPortrait
	GoPyData             GoPyData
	StatisticsData       []StatisticsData
	UploadData           UploadData
	FeedbackData         FeedbackData
	UserFeedbackListData UserFeedbackListData
	CheckReplyData       CheckReplyData
	ApplyManagerData     ApplyManagerData
	DelData              DelData
	ThirdMenu            ThirdMenu
}

//管理员实例
type Admin struct {
	AdduserData          AdduserData
	RemoveUserData       RemoveUserData
	CheckFeedbackData    CheckFeedbackData
	CheckUserListData    CheckUserListData
	RemoveManagerData    RemoveManagerData
	AddManagerData       AddManagerData
	ReplyFbData          ReplyFbData
	CheckApplyListData   CheckApplyListData
	CheckManagerListData CheckManagerListData
	CheckAllUser         CheckAllUserListData
	LoginLogList         LoginLogList
}

//用户基本信息
type Info struct {
	ID            string `json:"user_id"`
	User          string `json:"user_name"`
	Password      string `json:"user_pwd"`
	Sex           string `json:"user_sex"`
	Tel           string `json:"user_tel"`
	Email         string `json:"user_email"`
	Type          string `json:"user_type"`
	Head_portrait string `json:"head_portrait"`
}

//用于接受用户登录时的参数
type ReceiveLogin struct {
	UserName     string `json:"user_name"`
	UserPassword string `json:"user_pwd"`
}

//用于接受用户修改密码时的参数
type ReceiveChangePwd struct {
	UserID       string `json:"user_id"`
	UserPassword string `json:"user_pwd"`
}

//用于接受用户修改密码时的参数
type ReceiveChangePwd2 struct {
	ID          string `json:"id"`
	OldPassword string `json:"old_pwd"`
	NewPassword string `json:"new_pwd"`
}

//用于接受用户ID
type ReceiveID struct {
	UserID string `json:"user_id"`
}

//用于读取ak
type ReceiveAK struct {
	AK  string `json:"ak"`
	AKS string `json:"aks"`
}

//用于接受用户电话
type ReceiveTel struct {
	UserTel string `json:"tel"`
}

//用于接受用户验证码验证
type ReceiveTelAndCode struct {
	UserTel        string `json:"tel"`
	UserSecureCode string `json:"security_code"`
}

//用于接受用户查看动作信息时的参数
type ReceiveCheckMovement struct {
	UserName string `json:"user_name"`
	FileName string `json:"file_name"`
	FileType int    `json:"file_type"` //1是跑步、2是行走、3是搖手
	MoveType string `json:"move_type"` //要读取文件的类型“amp”幅度、“phase”相位、“abnormal”异常
	Type     int    `json:"type"`      //是否是去噪后的，0为原始数据，1为去噪后数据
}

//用于接受用户查看动作列表
type ReceiveMovementList struct {
	UserID   string `json:"user_id"`
	Type     string `json:"type"`
	Time     string `json:"time"`      //0表示所有数据，1表示一天内，2表示一周内
	PageNum  int    `json:"page_num"`  //分页页码
	PageSize int    `json:"page_size"` //每一页显示的条数
}

//用于接受管理员查看用户反馈
type ReceiveFeedBackList struct {
	SuperID  string `json:"super_id"`
	PageNum  int    `json:"page_num"`  //分页页码
	PageSize int    `json:"page_size"` //每一页显示的条数
}

//用于接受用户注册时的参数
type ReceiveRegister struct {
	UserName     string `json:"user_name"`
	UserPassword string `json:"user_pwd"`
	UserTel      string `json:"user_tel"`
	UserEmail    string `json:"user_email"`
}

//用于接受用户修改信息时的参数
type ReceiveChange struct {
	UserID       string `json:"user_id"`
	UserName     string `json:"user_name"`
	UserTel      string `json:"user_tel"`
	UserEmail    string `json:"user_email"`
	UserSex      string `json:"user_sex"`
	HeadPortrait string `json:"head_portrait"`
}

//用于接收用户反馈信息时的参数
type ReceiveFeedback struct {
	UserID  string `json:"user_id"`
	Content string `json:"content"`
}

//用于接收用户查看自己的反馈记录时的参数
type ReceiveUserCheckFeedbackList struct {
	UserID   string `json:"user_id"`
	PageNum  int    `json:"page_num"`
	PageSize int    `json:"page_size"`
}

//用于接收用户申请成为管理员时的参数
type ReceiveApplyManager struct {
	UserID string `json:"user_id"`
}

//用于接收用户查看反馈回复时的参数
type ReceiveCheckReplay struct {
	FbID string `json:"fb_id"`
}

//用于接收管理员添加普通用户时的参数
type ReceiveAdduser struct {
	ManagerID  string `json:"manager_id"`
	NormalName string `json:"normal_name"`
}

//用于接受管理员移除普通用户时的参数
type ReceiveRemoveUser struct {
	ManagerID string `json:"manager_id"`
	NormalID  string `json:"normal_id"`
}

//用于接收管理员查看用户列表时的参数
type ReceiveCheckUserList struct {
	ManagerID string `json:"manager_id"`
	PageNum   int    `json:"page_num"`
	PageSize  int    `json:"page_size"`
}

//用于接收超级管理员移除管理员时的参数
type ReceiveRemoveManager struct {
	SuperID   string `json:"super_id"`
	ManagerID string `json:"manager_id"`
}

//用于接收超级管理员添加管理员时的参数
type ReceiveAddManager struct {
	SuperID string `json:"super_id"`
	UserID  string `json:"user_id"`
}

//用于超管回复反馈时的参数
type ReceiveReplyFb struct {
	FbID  string `json:"fb_id"`
	Reply string `json:"reply"`
}

//用于超管查看申请列表
type ReceiveCheckApplyList struct {
	SuperID  string `json:"super_id"`
	PageNum  int    `json:"page_num"`
	PageSize int    `json:"page_size"`
}

//用于超管查看管理员列表
type ReceiveCheckManagerList struct {
	SuperID  string `json:"super_id"`
	PageNum  int    `json:"page_num"`
	PageSize int    `json:"page_size"`
}

//用户登录返回字段
type LoginData struct {
	IsLogin bool   `json:"is_login"`
	Type    string `json:"type"`
	UserID  string `json:"user_id"`
	JWT     string `json:"jwt"`
}

//用户注册返回字段
type RegisterData struct {
	Registered bool `json:"registered"`
}

//用户上传文件返回字段
type UploadData struct {
	UserID   string `json:"user_id"`
	FileName string `json:"file_name"`
	UserName string `json:"user_name"`
}

//用户删除上传文件接收字段
type delFileData struct {
	UserID   string `json:"user_id"`
	Type     string `json:"type"` //1为跑步，2为行走，3为摇手
	FileName string `json:"file_name"`
}

//用户删除文件后返回字段
type DelData struct {
	Success bool `json:"success"`
}

//接收用户调用python的参数
type ReceiveGoPyData struct {
	UserID   string `json:"user_id"`
	UserName string `json:"user_name"`
	FileName string `json:"file_name"`
	Type     string `json:"type"`
}

//手机验证码返回字段
type SecureCodeData struct {
	Sent bool `json:"sent"`
}

//调用Python返回字段
type GoPyData struct {
	Success bool `json:"success"`
}

//确认验证码返回字段
type VerifyCodeData struct {
	UserID   string `json:"user_id"`
	Verified bool   `json:"identify"`
}

//修改个人信息返回字段
type ModifyData struct {
	Modified bool `json:"modified"`
}

//修改个人密码返回字段
type ChangePwdData struct {
	Changed bool `json:"changed"`
}

//用户反馈返回字段
type FeedbackData struct {
	Success bool `json:"success"`
}

//用户查看动作信息返回字段
type CheckMovement struct {
	Content [][]float64 `json:"content"`
}

//用户查看头像列表返回字段
type CheckHeadPortrait struct {
	ID  string `json:"id"`
	Url string `json:"url"`
}

//统计数据
type StatisticsData struct {
	Value int    `json:"value"`
	Name  string `json:"name"`
}

//动作信息返回字段
type MovementData struct {
	DealtAmplitude string `json:"dealt_amplitude"`
	DealtPhase     string `json:"dealt_phase"`
	Amplitude      string `json:"amplitude"`
	Phase          string `json:"phase"`
	Abnormal       string `json:"abnormal"`
	Time           string `json:"time"`
}

//用户动作信息返回列表
type MoveData struct {
	ID       string `json:"id"`
	UserName string `json:"user_name"`
	Type     string `json:"type"`
	FileName string `json:"file_name"`
	Time     string `json:"time"`
}

//用户动作信息返回列表
type MovementListData struct {
	Sum  int        `json:"sum"`
	List []MoveData `json:"list"`
}

//用户查看自己的反馈记录返回列表
type UserFeedbackData struct {
	FbID    string `json:"fb_id"`
	Content string `json:"content"`
	Time    string `json:"time"`
	Status  int    `json:"status"`
}

//用户查看自己的反馈记录返回列表
type UserFeedbackListData struct {
	Sum  int                `json:"sum"`
	List []UserFeedbackData `json:"list"`
}

//用于查看反馈回复返回字段
type CheckReplyData struct {
	Reply string `json:"reply"`
}

//用户申请成为管理员返回字段
type ApplyManagerData struct {
	Success bool `json:"success"`
}

//管理员添加普通用户返回字段
type AdduserData struct {
	Adduser bool `json:"success"`
}

//管理员移除普通用户返回字段
type RemoveUserData struct {
	RemoveUser bool `json:"success"`
}

//超级管理员查看用户反馈返回字段
type CheckFeedback struct {
	FbID     string         `json:"fb_id"`
	UserID   string         `json:"user_id"`
	UserName string         `json:"user_name"`
	Content  string         `json:"content"`
	Answer   sql.NullString `json:"answer"`
	Tel      string         `json:"tel"`
	Status   string         `json:"status"`
	Time     string         `json:"time"`
}

//超级管理员查看用户反馈返回字段
type CheckFeedbackData struct {
	Sum           int             `json:"sum"`
	CheckFeedback []CheckFeedback `json:"check_feedback"`
}

//管理员查看用户列表返回字段
type CheckUserData struct {
	UserID   string `json:"user_id"`
	UserName string `json:"user_name"`
}

//管理员查看用户列表返回字段
type CheckUserListData struct {
	Sum  int             `json:"sum"`
	List []CheckUserData `json:"list"`
}

//超管查看所有用户列表
type CheckAllUserListData struct {
	Sum  int                `json:"sum"`
	List []CheckAllUserData `json:"list"`
}

//超管查看用户列表返回字段
type CheckAllUserData struct {
	UserID   string `json:"user_id"`
	UserName string `json:"user_name"`
	UserType string `json:"user_type"`
}

//超管移除管理员返回字段
type RemoveManagerData struct {
	IsRemove bool `json:"is_remove"`
}

//超管添加管理员返回字段
type AddManagerData struct {
	IsAdd bool `json:"is_add"`
}

//超管回复反馈返回字段
type ReplyFbData struct {
	Success bool `json:"success"`
}

//超管查看申请列表返回字段
type CheckApplyData struct {
	UserID   string `json:"user_id"`
	UserName string `json:"user_name"`
	Time     string `json:"time"`
	Status   int    `json:"status"`
}

//超管查看申请列表返回字段
type CheckApplyListData struct {
	Sum  int              `json:"sum"`
	List []CheckApplyData `json:"list"`
}

//超管查看管理员列表返回字段
type CheckManagerData struct {
	ManagerID   string `json:"manager_id"`
	ManagerName string `json:"manager_name"`
}

//超管查看管理员列表返回字段
type CheckManagerListData struct {
	Sum  int                `json:"sum"`
	List []CheckManagerData `json:"list"`
}

//往数据库里插入原始数据
type OriginData struct {
	UID      string `gorm:"Column:uid;Type:int;NOT NULL"`
	FileName string `gorm:"Column:filename;Type:varchar(255);DEFAULT:NULL"`
	DataUrl  string `gorm:"Column:data_url;Type:varchar(255);DEFAULT:NULL"`
	Time     string `gorm:"Column:time;Type:datetime;NOT NULL"`
}

//往数据库里插入处理后数据
type DealtData struct {
	UID         string `gorm:"Column:uid;Type:int;NOT NULL"`
	FileName    string `gorm:"Column:filename;Type:varchar(255);NOT NULL"`
	Amp         string `gorm:"Column:amplitude;Type:text;DEFAULT:NULL"`
	Phase       string `gorm:"Column:phase;Type:text;DEFAULT:NULL"`
	OriginAmp   string `gorm:"Column:origin_amplitude;Type:text;DEFAULT:NULL"`
	OriginPhase string `gorm:"Column:origin_phase;Type:text;DEFAULT:NULL"`
	Abnormal    string `gorm:"Column:abnormal;Type:text;DEFAULT:NULL"`
	Time        string `gorm:"Column:time;Type:datetime;NOT NULL"`
}

//用于在数据库中插入用户反馈信息
type Feedback struct {
	UserID  string `gorm:"Column:uid;Type:int;NOT NULL"`
	Content string `gorm:"Column:feedback;Type:text;NOT NULL"`
	Time    string `gorm:"Column:time;Type:datetime;NOT NULL"`
}

//用于在数据库中插入管理员与用户的关系
type UserRelationship struct {
	ManagerID string `gorm:"Column:manager_id;Type:int;NOT NULL"`
	NormalID  string `gorm:"Column:normal_id;Type:int;NOT NULL"`
}

//用于在数据库中删除管理员与用户的关系
type RemoveUserRelationship struct {
	ManagerID string `gorm:"Column:manager_id;Type:int;NOT NULL"`
	NormalID  string `gorm:"Column:normal_id;Type:int;NOT NULL"`
}

//用于在数据库中删除管理员与用户的关系
type LoginLogger struct {
	UserName string `gorm:"Column:username;Type:varchar(20);NOT NULL"`
	Time     string `gorm:"Column:time;Type:datetime;NOT NULL"`
}

//用于在数据库中插入用户申请成为管理员的记录
type ApplyManagerRecord struct {
	UserID string `gorm:"Column:uid;Type:int;NOT NULL"`
	Time   string `gorm:"Column:time;Type:datetime;NOT NULL"`
	Status int    `gorm:"Column:status;Type:int;NOT NULL"`
}

//用于查看用户登录日志
type LoginLog struct {
	UserID   string `json:"user_id"`
	UserName string `json:"user_name"`
	Time     string `json:"time"`
}

//用于查看用户登录日志
type LoginLogList struct {
	Sum  int        `json:"sum"`
	List []LoginLog `json:"list"`
}

//以下结构体用于登录时获取菜单
type FirstMenu struct {
	ID       int    `json:"id"`
	AuthName string `json:"authName"`
	Path     string `json:"path"`
}

type SecondMenu struct {
	ID       int         `json:"id"`
	AuthName string      `json:"authName"`
	Path     string      `json:"path"`
	Children []FirstMenu `json:"children"`
}

type ThirdMenu struct {
	MenuList []SecondMenu `json:"MenuList"`
}
